iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Security

密碼學小白的學習之路系列 第 29

[Day 29] 填充模式(Padding)

  • 分享至 

  • xImage
  •  

填充模式(Padding)

在區塊加密中,當明文的長度不是區塊大小的整數倍時,用額外的資料填滿最後一個不完整的區塊,以確保所有區塊的大小一致。

NoPadding

  • 不填充任何額外的資料
  • 如果加密內容不是區塊大小的整數倍加密則會報錯

ZeroBytePadding

  • 在資料的後端用零來填充至所需區塊的長度
  • 適合資料長度已知且不會出現尾部零的情況
  • 缺點: 有時候可能會讓人搞不清楚哪個 0 是填充的。

PKCS#7 Padding

  • 最常見的一種填充方式,用於對稱加密演算法。
  • 填充內容是填充位元組數的數值。
  • 若要填充 n 個字節,則每個填充字節值都是 n
  • 例如,若需填充 4 個位元組,則填入 \x04\x04\x04\x04。

PKCS#5 Padding

  • 和 PKCS#7 運算方式都相同
  • 唯一區別是 PKCS#5 只能用來填充 8 Byte (64bit)的Block,而 PKCS#7 的 BlockSize範圍是 1-255 Byte
  • 簡單來說就是 PKCS#5 屬於 PKCS#7 , PKCS#5 是 PKCS#7 的子集。
  • PKCS#5 Padding 不能用於 AES ,因為 AES 最小的區塊為 128bits ,也就是 16 Bytes。
  • Java 預設只有 PKCS#5

ISO/IEC 7816-4 填充

  • 先在資料後面加上一個 \x80,再用 0 填滿剩下的空間。
  • 此填充方法比較容易辨認出哪部分是填充的。

ANSI X.923 填充:

  • 在資料的後面先加上一堆 0,最後一個位元組標明你加了多少位元組。
  • 例如,補了 4 個位元組,最後一個位元組就是 \x04

ISO 10126 填充:

  • 在資料後面加上一些隨機的數字,最後一個位元組表示你補了多少位元組。
  • 這樣的隨機性讓填充看起來更難猜測。

參考資料

https://pki.wiki/%e6%95%b0%e5%ad%97%e8%af%81%e4%b9%a6%e6%a0%87%e5%87%86%e6%9c%89%e5%93%aa%e4%ba%9b/
https://ithelp.ithome.com.tw/articles/10250386


上一篇
[Day 28] 題目(Symmetric-10-1)
下一篇
[Day 29] 題目(Symmetric-10-2)
系列文
密碼學小白的學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言